From 25f5ff6d2a319e0363e047a392b0cb83b50e5d9f Mon Sep 17 00:00:00 2001
From: Kyah Rindlisbacher <kyah101@gmail.com>
Date: Sat, 9 Jun 2012 18:54:54 +1000
Subject: [PATCH] Issue #1624266 merging metatag_vbo into metatag

---
 metatag_vbo/metatag_vbo.info   |    7 +++
 metatag_vbo/metatag_vbo.module |  113 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 120 insertions(+), 0 deletions(-)
 create mode 100644 metatag_vbo/metatag_vbo.info
 create mode 100644 metatag_vbo/metatag_vbo.module

diff --git a/metatag_vbo/metatag_vbo.info b/metatag_vbo/metatag_vbo.info
new file mode 100644
index 0000000..3b5db20
--- /dev/null
+++ b/metatag_vbo/metatag_vbo.info
@@ -0,0 +1,7 @@
+name = Metatag views bulk operations
+description = "Adds support for Metatag views bulk operations."
+package = Meta tags
+dependencies[] = views_bulk_operations
+dependencies[] = metatag
+core = 7.x
+
diff --git a/metatag_vbo/metatag_vbo.module b/metatag_vbo/metatag_vbo.module
new file mode 100644
index 0000000..23ec773
--- /dev/null
+++ b/metatag_vbo/metatag_vbo.module
@@ -0,0 +1,113 @@
+<?php
+
+/**
+ * Implements hook_action_info().
+ * Provides integration with Views bulk operations.
+ */
+function metatag_vbo_action_info() {
+  return array(
+    'metatag_vbo_modify_metatags_action' => array(
+      'type' => 'entity',
+      'label' => t('Modify entity Metatags'),
+      'configurable' => TRUE,
+      'behavior' => array('changes_property'),
+      'triggers' => array('any'),  // not really sure what should go here
+    ),
+  );
+}
+/**
+ * Updates the entity's with $context['updates']
+ */
+function metatag_vbo_modify_metatags_action($entity, $context) {
+  if (empty($entity) || empty($context['updates']) || empty($context['defaults']) || empty($context['entity_type'])) {
+    return;
+  }
+
+  metatag_filter_values_from_defaults($context['updates'], $context['defaults']);
+
+  $entity->metatags = $context['updates'] + $entity->metatags;
+
+  entity_save($context['entity_type'], $entity);
+}
+
+/**
+ *  Implements hook_metatag_info_alter
+ */
+function metatag_vbo_metatag_info_alter(&$info){
+  if (!empty($info['tags']['robots'])) {
+    $info['tags']['robots']['form']['#type'] = 'checkboxes'; // bug in  metatag module i think
+  }
+}
+
+function metatag_vbo_modify_metatags_action_form($context, &$form_state) {
+  $entity_type = $context['entity_type'];
+  $defaults = metatag_config_load_with_defaults($entity_type);
+
+  $info = metatag_get_info();
+
+  $form_state['storage'] = array(
+    'defaults' => $defaults,
+    'info' => $info,
+    'entity_type' => $entity_type,
+  );
+
+  $weight =  1;
+  foreach ($info['groups'] as $group => $options) {
+    $form[$group] = array(
+      '#type' => 'fieldset',
+      '#title' => $options['label'],
+      '#weight' => ++$weight,
+      '#collapsible' => TRUE,
+      '#collapsed' => TRUE,
+    );
+  }
+  foreach ($info['tags'] as $tag => $options) {
+    if (empty($options['form'])) {
+      $options['form'] = array();
+    }
+
+    $element = $options['form'] + array(
+      '#title' => $options['label'],
+      '#type' => 'textfield',
+      '#description' => $options['description'],
+    );
+
+    if (in_array($tag, array_keys($defaults))) {
+      $element['#default_value'] = $defaults[$tag]['value'];
+    }
+
+    if (empty($options['group'])) {
+      $form[$tag] = $element;
+    }
+    else {
+      $form[$options['group']][$tag] = $element;
+    }
+  }
+
+  $token_types = array(token_get_entity_mapping('entity', $entity_type));
+  
+
+  // Show the list of available tokens.
+  $form['tokens'] = array(
+    '#theme' => 'token_tree',
+    '#token_types' => $token_types,
+    '#weight' => 100,
+  );
+
+  return $form;
+}
+
+function metatag_vbo_modify_metatags_action_submit($form, &$form_state) {
+  $updates = array();
+  foreach ($form_state['values'] as $key => $value) {
+    if (in_array($key, array_keys($form_state['storage']['info']['tags']))) {
+      $updates[$key]['value'] = $value;
+    }
+  }
+  return array(
+    'selection' => $form_state['selection'],
+    'entity_type' => $form_state['storage']['entity_type'],
+    'updates' => $updates,
+    'defaults' => $form_state['storage']['defaults'],
+  );
+}
-- 
1.7.5.4

